package linke.study.spring.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * 
 * <h1>How to Writing good pointcuts ?</h1>
 * 
 * <p>for optimal performance of matching you should think about what they are trying to
 * achieve and narrow the search space for matches as much as possible in the definition.
 * The existing designators naturally fall into one of three groups: kinded, scoping and
 * context:</p>
 * <ul>
 * <li>
 *   Kinded designators are those which select a particular kind of join point. 
 *   For example: execution, get,set, call, handler
 * </li>
 * <li>
 *   Scoping designators are those which select a group of join points of interest (of
 *   probably many kinds).For example: within, withincode
 * </li>
 * <li>
 *   Contextual designators are those that match (and optionally bind) based on context.
 *   For example: this,target, @annotation</li>
 * </ul>
 * <p>
 * A well written pointcut should try and include at least the first two types (kinded
 * and scoping), whilst the contextual designators may be included if wishing to match
 * based on join point context, or bind that context for use in the advice. Supplying
 * either just a kinded designator or just a contextual designator will work but could
 * affect weaving performance (time and memory used) due to all the extra processing and
 * analysis. Scoping designators are very fast to match and their usage means AspectJ
 * can very quickly dismiss groups of join points that should not be further processed
 * - that is why a good pointcut should always include one if possible.
 * </p>
 */ 
@Aspect
@SuppressWarnings("unused")
public class SystemScopePointCutDeclaration {

	@Pointcut("within(linke.study.spring.dao..*)")
	private void inDaoLayer() {}

	@Pointcut("within(linke.study.spring.service..*)")
	private void inServiceLayer() {}

}